import axios from "axios";
// 定义一个常量来保存统一的url
const  baseUrl = "http://localhost:8080";
//const  baseUrl = "http://manager.task.com"
/**
 * home组件中请求数据的对象
 * @type {{}}
 */
const projectRequest={
    /**
     * 加载所有的菜单,我们这里准备异步请求，需要一个回调函数
     * @param project 对象，用来封装查询条件
     * @param page 页码，默认是1
     * @param limit 每页大小，默认10
     * @param callBack 回调函数
     */
    loadProjects(project,page=1,limit=10,callBack){
        let url = baseUrl + "/project/list?page="+page + "&limit="+limit;
        if (project) {
            if (project.projectName) {
                url += "&projectName=" + project.projectName;
            }
            if (project.startTimeBegin) {
                url += "&startTimeBegin=" + project.startTimeBegin;
            }
            if (project.startTimeEnd) {
                url += "&startTimeEnd=" + project.startTimeEnd;
            }
            if (project.endTimeBegin) {
                url += "&endTimeBegin=" + project.endTimeBegin;
            }
            if (project.endTimeEnd) {
                url += "&endTimeEnd=" + project.endTimeEnd;
            }
            if (project.projectStatus) {
                url += "&projectStatus=" + project.projectStatus;
            }
            if (project.userId) {
                url += "&userId=" + project.userId;
            }
        }
        // 发送请求
        axios.get(url)
            .then(res=>{
                // 回调函数是从外面传入的，我们要将我们请求得到的结果传回到回调函数中.
                // 由于axiso会对结果进行一个封装，所以我们这里传入回调函数的数据直接就是res.data
                // 我们在外面获取的数据就是我们后端响应的数据本身。
                callBack(res.data);
            })
    },
    /**
     * 通过id加载project
     * @param projectId
     * @param callBack 回调函数  这里接收的是一个函数
     */
    loadProjectById(projectId,callBack){
        let url = baseUrl + "/project/queryById?projectId=" + projectId;
        axios.get(url).then(res=>{
            //res 是响应的结果，但是这个结果是被Axios封装过的。我们后端返回的数据应该 res.data
            // 调用回调函数, 将我们请求得到的结果传入回调函数
            callBack(res.data);
        });
    },
    /**
     * 通过编辑更新项目数据
     * @param project 项目数据对象
     * @param callBack 回调函数 这里接收的是一个函数
     */
    updateProject(project, callBack) {
        let url = baseUrl + "/project/update";
        axios.post(url, project).then(res => {
            // res 是响应的结果，但是这个结果是被 Axios 封装过的。我们后端返回的数据应该是 res.data
            // 调用回调函数, 将我们请求得到的结果传入回调函数
            callBack(res.data);
        });
    },


    /**
     * 通过id删除项目
     * @param projectId
     * @param callBack 可选的回调函数
     */
    deleteProjectById(projectId, callBack) {
        let url = baseUrl + "/project/delete?projectId=" + projectId; // POST 请求的 URL
        axios.post(url).then(res => {
            // 如果没有数据返回，只处理状态或结果
            if (callBack) {
                callBack(null); // 没有数据返回时，回调函数传递 null
            }
        }).catch(error => {
            // 处理错误情况
            console.error('请求失败:', error);
            if (callBack) {
                callBack(error); // 传递错误给回调函数
            }
        });
    },
    /**
     * 通过id更新项目状态使其归档
     * @param projectId
     * @param callBack 可选的回调函数
     */
    pigeonholeById(projectId, callBack) {
        let url = baseUrl + "/project/pigeonhole?projectId=" + projectId; // POST 请求的 URL
        axios.post(url).then(res => {
            // 如果没有数据返回，可以只处理状态或结果
            if (callBack) {
                callBack(null); // 没有数据返回时，回调函数传递 null
            }
        }).catch(error => {
            // 处理错误情况
            console.error('请求失败:', error);
            if (callBack) {
                callBack(error); // 传递错误给回调函数
            }
        });
    },

    //进行批量删除（只能删除用户自己的项目）
    batchDelete(projectIds, callBack) {
        let url = baseUrl + "/project//batchDelete"; // POST 请求的 URL
        axios.post(url, {
            projectIds: projectIds // 传递 JSON 数据
        }).then(res => {
            // 处理成功请求的情况
            if (callBack) {
                callBack(null); // 成功时不需要返回数据，可以传递 null
            }
        }).catch(error => {
            // 处理错误情况
            console.error('请求失败:', error);
            if (callBack) {
                callBack(error); // 传递错误给回调函数
            }
        });
    },
    //进行批量归档（只能归档用户自己的项目）
    batchPigeonhole(projectIds, callBack) {
        let url = baseUrl + "/project/batchPigeonhole"; // POST 请求的 URL
        axios.post(url, {
            projectIds: projectIds // 传递 JSON 数据
        }).then(res => {
            // 处理成功请求的情况
            if (callBack) {
                callBack(null); // 成功时不需要返回数据，可以传递 null
            }
        }).catch(error => {
            // 处理错误情况
            console.error('请求失败:', error);
            if (callBack) {
                callBack(error); // 传递错误给回调函数
            }
        });
    },
    //进行批量发布（只能发布用户自己的项目）
    batchPublish(projectIds, callBack) {
        let url = baseUrl + "/project/batchPublish"; // POST 请求的 URL
        axios.post(url, {
            projectIds: projectIds // 传递 JSON 数据
        }).then(res => {
            // 处理成功请求的情况
            if (callBack) {
                callBack(null); // 成功时不需要返回数据，可以传递 null
            }
        }).catch(error => {
            // 处理错误情况
            console.error('请求失败:', error);
            if (callBack) {
                callBack(error); // 传递错误给回调函数
            }
        });
    },
    //查询删除列表，分页查询
    loadDeleteProjects(project,page=1,limit=10,callBack){
        let url = baseUrl + "/project/deleteList?page="+page + "&limit="+limit;
        if (project) {
            if (project.projectName) {
                url += "&projectName=" + project.projectName;
            }
            if (project.startTimeBegin) {
                url += "&startTimeBegin=" + project.startTimeBegin;
            }
            if (project.startTimeEnd) {
                url += "&startTimeEnd=" + project.startTimeEnd;
            }
            if (project.endTimeBegin) {
                url += "&endTimeBegin=" + project.endTimeBegin;
            }
            if (project.endTimeEnd) {
                url += "&endTimeEnd=" + project.endTimeEnd;
            }
            if (project.projectStatus) {
                url += "&projectStatus=" + project.projectStatus;
            }
            if (project.userId) {
                url += "&userId=" + project.userId;
            }
        }
        // 发送请求
        axios.get(url)
            .then(res=>{
                // 回调函数是从外面传入的，我们要将我们请求得到的结果传回到回调函数中.
                // 由于axiso会对结果进行一个封装，所以我们这里传入回调函数的数据直接就是res.data
                // 我们在外面获取的数据就是我们后端响应的数据本身。
                callBack(res.data);
            })
    },
    //归档列表中的恢复功能
    draftById(projectId, callBack) {
        let url = baseUrl + "/project/draft?projectId=" + projectId; // POST 请求的 URL
        axios.post(url).then(res => {
            // 如果没有数据返回，可以只处理状态或结果
            if (callBack) {
                callBack(null); // 没有数据返回时，回调函数传递 null
            }
        }).catch(error => {
            // 处理错误情况
            console.error('请求失败:', error);
            if (callBack) {
                callBack(error); // 传递错误给回调函数
            }
        });
    },
    //统计全部项目数
    allProjects(callBack) {
        let url = baseUrl + "/project/allProjects"
        axios.get(url)
            .then(res=>callBack(res.data));
    },
    //统计我的项目数
    myProjects(userId,callBack) {
        let url = baseUrl + "/project/myProjects?userId=" + userId;
        axios.get(url)
            .then(res=>callBack(res.data));
    },
}
// 将projectRequest暴露出去
export default projectRequest;